package com.telit.android.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.telit.android.dto.AppTrackDTO;
import com.telit.android.dto.LongitudeAndLatitudeDTO;
import com.telit.android.dto.PatrolTaskDTO;
import com.telit.android.dto.PatrolTaskQueryDTO;
import com.telit.android.entity.AppTaskFeedback;
import com.telit.common.entity.CommEventTaskTrack;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * <p>
 * 事件任务巡护关联表 Mapper 接口
 * </p>
 *
 * @author yummy
 * @since 2021-07-26
 */
public interface CommEventTaskTrackDao extends BaseMapper<CommEventTaskTrack> {

    void insertBatch(@Param("itemList") List<CommEventTaskTrack> itemList);

    void insertOtherTaskBatch(@Param("itemList") List<CommEventTaskTrack> commEventTaskTrackList);

    List<Long> selectIdByTaskIdAndStatus(@Param("taskId") Long taskId, @Param("status") String status,@Param("forestkeeperId")  Long forestkeeperId);

    /**
     * 根据用户id查询用户正在执行任务的信息
     * @return
     */
    List<CommEventTaskTrack> selectByTaskingByForesterId(@Param("list") List<Long> foresterIdList,@Param("status")String status);

    /**
     * 根据火情id查询任务list
     * @param fireId
     * @return
     */
    List<PatrolTaskDTO> patrolTaskByFireId(@Param("fireId")Long fireId);

    /**
     * 根据飞手id查询无人机的巡航任务信息
     */
    List<AppTrackDTO> cruiseTaskListByUserId(@Param("dto") PatrolTaskQueryDTO dto,
                                             @Param("statusList") List<String> status);

    /**
     * 分页查询飞手任务信息
     * @param appTrackDTOIPage
     * @param dto
     * @param status
     * @return
     */
    IPage<AppTrackDTO> cruiseTaskListByUserIdPage(IPage<AppTrackDTO> appTrackDTOIPage,@Param("dto")PatrolTaskQueryDTO dto, @Param("statusList")List<String> status);

    /**
     * 根据护林员id查询巡护信息
     * @return
     */
    List<AppTrackDTO> patrolTaskListByUserId(@Param("dto")PatrolTaskQueryDTO dto, @Param("statusList")List<String> status);

    /**
     * 分页查询护林员任务信息
     * @param appTrackDTOIPage
     * @param dto
     * @param status
     * @return
     */
    IPage<AppTrackDTO> patrolTaskListByUserIdPage(IPage<AppTrackDTO> appTrackDTOIPage,@Param("dto")PatrolTaskQueryDTO dto, @Param("statusList")List<String> status);

    /**
     * 获取巡护任务具体信息
     * @return
     */
    AppTrackDTO patrolTaskById(@Param("forestkeeperId")Long forestkeeperId, @Param("id")Long id);

    /**
     * 获取巡航任务具体信息
     * @param forestkeeperId
     * @param id
     * @return
     */
    AppTrackDTO cruiseTaskById(@Param("forestkeeperId")Long forestkeeperId, @Param("id")Long id);

    /**
     * 无人机任务列表
     * @param uavCode
     * @param status
     * @return
     */
    List<AppTrackDTO>  uavTaskListByCode(@Param("code")String uavCode,@Param("status")String status);

    /**
     * 根据任务id和用户id查询反馈列表
     * @return
     */
    List<AppTaskFeedback> selectFeedbackByUserIdAndTaskId(@Param("forestkeeperId")Long forestkeeperId, @Param("id")Long id);

    /**
     * 查询日常巡护或者巡航任务的次数
     */
    int selectNormalTaskCount(@Param("forestkeeperId") Long forestkeeperId,@Param("trackType") String trackType);

    /**
     * 根据任务id查询巡护状态
     * @param taskId
     * @return
     */
    List<AppTrackDTO> selectPatrolStatusAndEndTimeByTaskId(@Param("taskId")Long taskId);

    /**
     * 根据任务id查询巡航状态
     * @param taskId
     * @return
     */
    List<AppTrackDTO> selectCruiseStatusAndEndTimeByTaskId(@Param("taskId")Long taskId);

    /**
     * 查询任务所在经纬度
     * @param userId
     * @param taskId
     * @return
     */
    LongitudeAndLatitudeDTO queryLongitudeAndLatitude(@Param("userId")Long userId, @Param("taskId")Long taskId);

    /**
     * 任务id以及护林员id更新巡护任务id
     * @return
     */
    int updateTrackIdByTaskIdAndForesterId(@Param("taskId") Long taskId, @Param("foresterId") Long foresterId, @Param("trackId") String trackId);
}
